package algorithm.leetcode.medium;

/*
 给定一个 24 小时制（小时:分钟 "HH:MM"）的时间列表，找出列表中任意两个时间的最小时间差并以分钟数表示。
 */

import java.util.Arrays;
import java.util.List;

/**
 * @author jack.wu
 * @version 1.0
 * @date 2021/1/5
 */
public class Question539 {

    public static void main(String[] args) {

    }

    public int findMinDifference(List<String> timePoints) {
        if (timePoints.size() > (24 * 60)) {
            // 由于分钟数最多为 24 * 60 ，若时间点个数超过 24 * 60 ，则必有重复，最小时间差为0
            return 0;
        }
        // 分钟数组
        int[] minutes = new int[timePoints.size()];
        String timeStr;
        for (int i = 0; i < timePoints.size(); i++) {
            timeStr = timePoints.get(i);
            minutes[i] = Integer.parseInt(timeStr.substring(0, 2)) * 60 + Integer.parseInt(timeStr.substring(3));
        }
        Arrays.sort(minutes);

        int min = 24 * 60;
        for (int i = 1; i < minutes.length; i++) {
            min = Math.min(min, minutes[i] - minutes[i - 1]);
            if (min == 0) {
                return 0;
            }
        }
        // 有可能极端情况["23:59","00:00"]
        min = Math.min(1440 - minutes[minutes.length - 1] + minutes[0], min);
        return min;
    }


}
